package d10_test;

import java.util.List;
import java.util.Random;

//1、用第一种方式创建,实现创建线程
public class SendThread extends Thread {
    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    //线程类,要拥有的共享资源
    private final List<String> gift;//既然是唯一的,最好就加上final, 不要让别人进行修改
    //3、要计算小红小明各自发送了多少个礼品
    //应该属于线程类,每个线程是一个对象,都是独立的,应该有自己的属性
    private int count;

    public SendThread(String name, List<String> gift) {
        super(name);
        this.gift = gift;
    }

    //2、重写run()方法,声明线程要进行的事情

    //2.1首先,这个代码,不是高度面向对象,所以不可以用this当做锁
    //在run()方法上键synchronized,就是将this当当做锁
    //锁应该是gift
    @Override
    public void run() {
        //2.2获取,当前执行的线程名称
        String name = Thread.currentThread().getName();
        //2.3进行上锁
        //创建一个随机数对象,用与随机发送礼品
        Random r = new Random();
        //注意一定要是对象,当做锁
        //2.5要不断发,所以要进行循环
        while (true) {
            synchronized (gift) {
                //2.6但礼物小于,10份是就不再进行发送了
                if (gift.size() < 10){
                    break;
                }
                //2.4开始发送礼品
                //2.4.1所及获取,集合里面的礼品.然后删除(当做就是发送出去了)
                String giftName = gift.remove(r.nextInt(gift.size()));
                //2.4.2然后输出,随发送了礼品
                System.out.println(name + "发送了===>" + giftName);
                ++count;
            }
        }
    }
}
